/* 
 * Autores:
 *      Jonathan Lopez  11106
 *      Jorge Martínez  11237
 * 
 * Archivo: Producto.java
 * Última Revision: $Rev: 69 $
 *      Fecha: $Date: 2011-09-19 06:58:38 +0000 (Mon, 19 Sep 2011) $
 */

package Manejo.Transporte;
import Archivador.*;

/**
 * Representa el contenido en el Contenedor.
 * 
 * @author Jonathan López
 * @author Jorge Martinez
 */
public class Producto implements iArchivable {
    private final double peso;
    private final String descripcion;

    /**
     * Constructor de Producto
     * @param peso peso del Producto, en Toneladas métricas.
     * @param descripcion un String con la descripción del Producto que se
     * consolida
     */
    public Producto(double peso, String descripcion)
    {
        this.peso = peso;
        this.descripcion = descripcion;
    }

    /**
     * Devuelve la descripción del Producto
     * @return String con descripción
     */
    public String obtenerDescripcion()
    {
        return descripcion;
    }

    /**
     * Devuelve el peso del Producto, en Toneladas métricas
     * @return peso del Producto
     */
    public double obtenerPeso()
    {
        return peso;
    }
    
    /**
     * Estima el peso de un arreglo de Productos, en Toneladas métricas
     * @param productos Arreglo de Productos a estimar
     * @return Peso, en Toneladas métricas
     */
    public static double estimarPesoProductos( Producto[] productos ){
        double pesoTotal = 0.0;
        for (Producto productoActual : productos) {
            pesoTotal += productoActual.obtenerPeso();
        }
        return pesoTotal;
    }

    /**
     * Devuelve una representación String del Producto que incluy su peso y
     * su descripción.
     * @return representación String
     */
    @Override
    public String toString()
    {
        return peso + " Ton. de " + descripcion;
    }
    
     /**
     * Regresa un línea de texto para ser guardada en un medio persistente.
     * @return String
     * @see iArchivable#guardar() 
     */
    @Override
    public String guardar(){
        // Orden: peso, descripcion
        String linea = "";
        linea += peso + "|" + descripcion;
        return linea;
    }
    
    /**
     * Genera un nuevo Producto a partir de una línea de texto creada a través
     * del método guardar()
     * @param linea
     * @return nuevo Producto a partir del String, o null si falla
     */
    public static Producto parseProducto( String linea ){
        // Validar
        if( linea.length() == 0 )
            return null;
        
        if( !linea.contains( "|" ) )
            return null;
        
        String[] partes = linea.split( "\\|" );
        if( partes.length != 2 )
            return null;
        
        // Parsear los elementos
        // Orden: peso, descripcion
        double _peso = Double.parseDouble(partes[0]);
        String _descripcion = partes[1];
        
        return new Producto( _peso, _descripcion );
    }
}
